uniapp 子组件更新数据 |
您所在的位置:网站首页 › uniapp list组件 › uniapp 子组件更新数据 |
11月份的面试越来越觉得自己学的不够踏实和深入。现在实习了有空总结下 京东前端实习一道面试题:vue中组件通信接口有哪些,除了props和$emit? 注意是接口,我说了vuex和localStorage,立马就被否决了 一、父子组件通信 1.props和$emitprops最常见的父子通信接口,但是props是单向数据流的形式:父级 prop 的更新会向下流动到子组件中,但是反过来则不行 此时需要借助vue提供的事件监听机制来完成子组件向父组件数据流动更新的功能。 在子组件使用$emit定义监听事件名称,在父组件使用v-on监听该事件,在事件中改变父组件的状态。 // father.vue 2.$parent和$children或者$refs 1) $parent$parent用来访问父组件实例,通常父组件都是唯一确定的 // children.vue 2) $children$children用来访问子组件实例,要知道一个组件的子组件可能是不唯一的,所以它的返回值是数组. // father.vue 3) $refs$children的缺点是无法确定子组件的顺序,也不是响应式的。所以如果你确切的知道要访问的子组件建议使用$refs。 $refs需要使用ref属性在子组件上设置标识,然后通过this.$refs.refName访问。 // father.vue注意:ref属性作为组件属性时,访问的是根组件的实例;作为dom属性时,访问的是dom信息 // father.vue 3.inheritAttrs和$attrs 1)inheritAttrs这是@2.4新增的属性和接口。inheritAttrs属性控制子组件html属性上是否显示父组件的提供的属性 // father.vue浏览器渲染的时候,默认会把父组件写在子组件的属性一起渲染出来,它是这样的 销毁事件发起 // children1.vue监听 // children2.vue销毁 // children2.vue 这里需要特别强调的一点是当一个事件在多个组件里监听时,每个组件在销毁时连同事件也要销毁,不然它会在你看不到的地方继续执行而难以被发现,当然不管是不是在多个组件监听,在组件销毁时一起销毁监听事件不失为一种良好的编程习惯 3.缺点看了前面的例子,你会发现,通信最关键的地方其实就在上面的updateMsg函数里,而这之外的所有的东西,都只是一种繁琐的铺垫,所以缺点也是显而易见的。另外对于多个监听的地方,你还需要手动关闭,还有一个被大家诟病的就是每个事件都必需起一个独一无二的名字,这对起名废的同学来说是灾难啊 4.替代vuex有人已经提供了一个方案使用eventBus替代vuex,这个方案为我们解决了前面提到的缺点,具体可以看这里 三、隔代组件通信 1.provide和inject(依赖注入)依赖注入是在provide选项中提供要共享的数据,在inject选项中使用共享的数据。它也是官方首推在不使用vuex时隔代组件通信方式 1)使用 // 父级组件提供 'foo'需要知道的是,provide也可以是个函数,返回一个对象,更多细节可以参考详细的api文档 此外,它也和props一样可以设置默认值 const 2)不明显的缺点出于设计的考虑,依赖注入和$root一样,都是非响应式的数据模式 但是官方又说了,可以通过提供一个响应式的对象,来使注入的数据是响应式的。 // 父级组件提供 'foo' |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |